package com.类加载顺序;

//如果我们对实例变量直接赋值或者使用实例代码块赋值，那么编译器会将其中的代码放到类的构造函数中去，并且这些代码会被放在对超类构造函数的调用语句之后，构造函数本身的代码之前
//Java是按照编程顺序来执行实例变量初始化器和实例初始化器中的代码的，并且不允许顺序靠前的实例代码块初始化在其后面定义的实例变量
public class InstanceVariableInitializer {

	private int i = 1;
	private int j = i + 1;

	public InstanceVariableInitializer(int var) {
		System.out.println(i);
		System.out.println(j);
		this.i = var;
		System.out.println(i);
		System.out.println(j);
	}

	{ // 实例代码块
		j += 3;

	}

	public static void main(String[] args) {
		new InstanceVariableInitializer(8);
	}

}
/* Output:
    1
    5
    8
    5
*/
